package com.example.demo.LeetCode精选TOP面试题;

/**
 * @author：zzc
 * @date: 2022/4/21
 */
public class 最长公共前缀 {

    //编写一个函数来查找字符串数组中的最长公共前缀。
    //
    //如果不存在公共前缀，返回空字符串 ""。
    //
    // 
    //
    //示例 1：
    //
    //输入：strs = ["flower","flow","flight"]
    //输出："fl"
    //示例 2：
    //
    //输入：strs = ["dog","racecar","car"]
    //输出：""
    //解释：输入不存在公共前缀。
    // 
    //
    //提示：
    //
    //1 <= strs.length <= 200
    //0 <= strs[i].length <= 200
    //strs[i] 仅由小写英文字母组成

    //1、横向扫描
    //依次遍历字符串数组中的每个字符串，对于每个遍历到的字符串，更新最长公共前缀，当遍历完所有的字符串以后，即可得到字符串数组中的最长公共前缀。
    //如果在尚未遍历完所有的字符串时，最长公共前缀已经是空串，则最长公共前缀一定是空串，因此不需要继续遍历剩下的字符串，直接返回空串即可。
    public String longestCommonPrefix(String[] strs) {
        if (strs == null || strs.length == 0) {
            return "";
        }
        String prefix = strs[0];
        int count = strs.length;
        for (int i = 0; i < count; i++) {
            prefix = longestCommonPrefix2(prefix, strs[i]);
            if (prefix.length() == 0) {
                break;
            }
        }
        return prefix;
    }

    //取两个字符串的最长公共前缀
    public String longestCommonPrefix2(String str1, String str2) {
        int length = Math.min(str1.length(), str2.length());
        int index = 0;
        while (index < length && str1.indexOf(index) == str2.indexOf(index)) {
            index++;
        }
        return str1.substring(0, index);
    }

    //2、纵向扫描


    //3、分治法


    //4、二分查找


}
